from scipy import optimize as op
import numpy as np
#注意：本题目为线性规划的例子。
#题目如下：
#    min -2*x1-3*x2+5*x3
#   s.t. x1+x2+x3 = 7
#       -2*x1+5*x2-x3 <= -10
#       x1+3*x2+x3 <= 12
#       x1,x2,x3 >= 0
c = np.array([-2, -3, 5])#输入目标函数，这里注意默认均采用最小值表示，即“min ”
#所以要求最大值的话记得加个负号
A_ub = np.array([[-2, 5, -1], [1, 3, 1]])#若干个不等式约束的系数矩阵。
#这道题目中有两个不等式，所以有两行。
#关于不等式约束均默认采用小于等于，因此仅有一个上界就够了
b_ub = np.array([-10, 12])#不等式约束的常数，是一个n行1列数组
A_eq = np.array([[1, 1, 1]])#等式约束的系数矩阵
b_eq = np.array([7])#等式约束的常数，同样是n行1列
x1 = [0, np.inf]
x2 = [0, np.inf]
x3 = [0, np.inf]#输入每个自变量的取值范围
res = op.linprog(c, A_ub, b_ub, A_eq, b_eq, bounds=(x1, x2, x3))
# bounds为每个为每个未知量的范围，用n行数组表示，n表示自变量数目
#这里要注意的是，op.linprog中每一个量要对应其正确的位置：
#目标函数，不等式系数矩阵，不等式常数，等式系数矩阵，等式常数，自变量的取值范围
print(res)
#显示“optimization terminated successfiully”就是成功求出最优解